
#include "linklist.h"				//声明单链表结点类型

void CreateListR(LinkNode *&L,ElemType a[],int n)
//尾插法建立单链表
{
    LinkNode *s,*r;
    L = (LinkNode *)malloc(sizeof(LinkNode));
    r=L;
    for(int i = 0;i<n;i++){
        s=(LinkNode *)malloc(sizeof(LinkNode));
        s->data=a[i];
        r->next=s;
        r=s;
    }
    r->next=NULL;
}
void InitList(LinkNode *&L)
{
	L=(LinkNode *)malloc(sizeof(LinkNode));  	//创建头结点
	L->next=NULL;
}



void DestroyList(LinkNode *&L) //销毁单链表
{
	LinkNode * pre=L,*p=L->next;
    while(p!=NULL){
        free(pre);
        pre = p;
        p = pre->next;
    }
	free(pre);
	
}



bool ListEmpty(LinkNode *L) //判空
{
	return(L->next==NULL);
}


int ListLength(LinkNode *L) //求链表的长度
{
	int n = 0;
    LinkNode *p = L;
    while (p->next!=NULL)
    {
        n++;
        p=p->next;
    }
    return(n);    
	
}

void DispList(LinkNode *L)  //显示单链表
{
	LinkNode *p = L -> next;
    while (p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
	
}

bool ListDelete(LinkNode *&L,int i,ElemType &e)
{
	
	// 在带头结点的单链线性表L的第e个元素之前删除元素i  
	/********** Begin **********/ 
    int j = 0;
    LinkNode *p = L,*q;
    if(i<0) return false;
    while(j<i-1&&p!=NULL){
        j++;
        p=p->next;
    }
    if(p==NULL)
        return false;
    else{
        q=p->next;
        if(q==NULL)
            return false;
        e=q->data;
        p->next=q->next;
        free(q);
        return true;
    }

	/********** End **********/

}

// bool GetElem(LinkNode *L,int i,ElemType &e){
//     int j = 0;
//     LinkNode *p = L;
//     if(i<0) return false;
//     while
// }
